package com.sugon.utils;

import cn.hutool.core.collection.CollectionUtil;

import java.util.Iterator;
import java.util.Map;

/**
 * @description: map工具类
 * @author: YuXD
 * @create: 2020-05-30 17:09
 **/
public class MapUtil {

    /**
     * 从map获取默认Integer值
     *
     * @param map
     * @param key
     * @param defaultValue
     * @return
     */
    public static Integer getInt(Map<?, ?> map, Object key, int defaultValue) {
        if (CollectionUtil.isNotEmpty(map) && map.containsKey(key)) {
            return cn.hutool.core.map.MapUtil.getInt(map, key);
        } else {
            return defaultValue;
        }
    }

    /**
     * 从map获取默认字符串值
     *
     * @param map
     * @param key
     * @param defaultValue
     * @return
     */
    public static String getStr(Map<?, ?> map, Object key, String defaultValue) {
        if (CollectionUtil.isNotEmpty(map) && map.containsKey(key)) {
            return cn.hutool.core.map.MapUtil.getStr(map, key);
        } else {
            return defaultValue;
        }
    }

    /**
     * 从map获取默认字符串值
     *
     * @param map
     * @param key
     * @return
     */
    public static String getStr(Map<?, ?> map, Object key) {
        return cn.hutool.core.map.MapUtil.getStr(map, key);
    }

    /**
     * 1、移除Map中的空值，空值包括null或空字符串
     * 2、对map中的字符串类型的值进行trim操作
     *
     * @param map
     * @param <K>
     * @param <V>
     * @return
     */
    public static <K, V> Map<K, V> removeEmptyValue(Map<K, V> map) {
        if (cn.hutool.core.map.MapUtil.isEmpty(map)) {
            return map;
        }
        final Iterator<Map.Entry<K, V>> iter = map.entrySet().iterator();
        Map.Entry<K, V> entry;
        while (iter.hasNext()) {
            entry = iter.next();
            V value = entry.getValue();
            if (null == value || "".equals(value) || "null".equals(value)) {
                iter.remove();
            } else {
                // 对于字符串类型的参数需要trim
                if (value instanceof String) {
                    entry.setValue((V) value.toString().trim());
                }
            }
        }
        return map;
    }

}
